// 2024-07-29 单纯的引入npm需要这样操作
// https://www.npmjs.com/package/mina-request 插件网址
import WxRequest from 'mina-request'
import { getStorage, clearStorage } from './storage'
import { modal, toast } from './extendApi'
import { env } from './env'

const http = new WxRequest({
  baseURL: env.baseURL, //基础路径
  timeout: 15000,
  isLoading: false
})

// 配置请求拦截器
http.interceptors.request = (config) => {
  const token = getStorage('token')
  if (token) {
    config.header['token'] = token
  }
  return config
}

// 配置响应拦截器
http.interceptors.response = async (response) => {
  // response.config  封装了 config 属性 是请求的参数信息 可以使用请求参数 进行调试
  // response.data 服务器真正响应的数据 2024-07-29
  // response.isSuccess 判断代码执行了那个函数 成功？失败
  // response.isSuccess 为false 说明网络出现了问题
  const { isSuccess, data } = response
  if (!isSuccess) {
    toast({
      title: '网络错误请重试',
      icon: 'error'
    })
    // return Promise.reject(response)
    return response
  }

  // 判断成功 状态码
  switch (data.code) {
    case 200:
      return data
    case 208:
      const res = await modal({
        content: '鉴权失败，请重新登录',
        showCancel: false
      })
      if (res) {
        clearStorage()
        wx.navigateTo({
          url: '/pages/login/login'
        })
      }
      return Promise.reject(response)

    default:
      toast({
        title: '程序错误，请联系客服或稍后重试'
      })
      return Promise.reject(response)
  }
}

export default http
